home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / VDIESCAP.D < prev    next >
Encoding:
Modula Definition  |  1990-10-09  |  14.3 KB  |  385 lines

  1. DEFINITION MODULE VDIEscapes;
  2.  
  3.  
  4. (*      Megamax-Modula II GEM Library (Escape-Funkionen)
  5.  *
  6.  *      geschrieben von Manuel Chakravarty
  7.  *
  8.  *      Version 2.2     V#0023      Erstellt März 87 - Januar 88
  9.  *)
  10.  
  11. (*      In den ROM's befinden sich nur die ersten 19 VDI-Escape-Routine
  12.  *      (bis 'RemoveCursor). Mit Hilfe des GDOS sind aber alle in diesem
  13.  *      Modul aufgeführten Prozeduren verwendbar. Eine Ausnahme bilden
  14.  *      'SetLineOffset' und 'InitSystemFont', da diese beiden Routine
  15.  *      schon im ROM vorhanden sind, sie werden in der Regel aber nur
  16.  *      systemintern vom GEM verwendet.
  17.  *
  18.  *      HINWEIS: In der aktuellen Modulversion sind noch nicht alle GDOS
  19.  *               Routinen implementiert. Die nicht implementierten sind
  20.  *               gekennzeichnet.
  21.  *)
  22.  
  23.  
  24. FROM    SYSTEM   IMPORT ADDRESS;
  25.  
  26. FROM    GrafBase IMPORT Rectangle, Point;
  27.  
  28. FROM    GEMEnv   IMPORT DeviceHandle;
  29.  
  30.  
  31. PROCEDURE GetCharCells (    handle       : DeviceHandle;
  32.                         VAR rows, columns: CARDINAL);
  33.  
  34.         (*  Erfragt die Anzahl der Zeilen und Spalten des Textbildschirms.
  35.          *  Ist ein Wert gleich 'MaxCard', so kann der Cursor in dieser
  36.          *  Richtung nicht positsioniert werden.
  37.          *)
  38.  
  39. PROCEDURE ExitCursorMode (handle: DeviceHandle);
  40.  
  41.         (*  Es wird von alphanumerischer auf grafische Ausgabe umgeschaltet.
  42.          *)
  43.  
  44. PROCEDURE EnterCursorMode (handle: DeviceHandle);
  45.         
  46.         (*  Hiermit schaltet man von grafischer auf alphanumerische Ausgabe.
  47.          *)
  48.          
  49.          
  50. (*  Die folgenden vier Routinen bewegen den Cursor um je eine Zeichen-
  51.  *  position. Stößt er dabei an einem Bildschirmrand an, so bleibt er
  52.  *  dort stehen und alle weiteren Versuche ihn in diese Richtung zu be-
  53.  *  wegen werden ignoriert.
  54.  *)
  55.  
  56. PROCEDURE CursorUp (handle: DeviceHandle);
  57.         
  58.         (*  Bewegt den Cursor um eine Zeile nach oben.
  59.          *)
  60.  
  61. PROCEDURE CursorDown (handle: DeviceHandle);
  62.  
  63.         (*  Bewegt den Cursor um eine Zeile nach unten.
  64.          *)
  65.  
  66. PROCEDURE CursorRight (handle: DeviceHandle);
  67.  
  68.         (*  Bewegt den Cursor um eine Spalte nach rechts.
  69.          *)
  70.  
  71. PROCEDURE CursorLeft (handle: DeviceHandle);
  72.  
  73.         (*  Bewegt den Cursor um eine Spalte nach links.
  74.          *)
  75.  
  76.  
  77. PROCEDURE CursorHome (handle: DeviceHandle);
  78.  
  79.         (*  Der Textcursor wird in die Ecke links oben positioniert.
  80.          *)
  81.  
  82. PROCEDURE EraseToEndOfScreen (handle: DeviceHandle);
  83.  
  84.         (*  Diese Routine löscht den Textbildschirm bei der Cursorposition
  85.          *  beginnend bis zur rechten, unteren Ecke.
  86.          *)
  87.  
  88. PROCEDURE EraseToEndOfLine (handle: DeviceHandle);
  89.  
  90.         (*  Hiermit wird die Zeile, in der der Cursor steht von der Cursor-
  91.          *  position bis zum Zeilenende gelöscht.
  92.          *)
  93.  
  94. PROCEDURE LocateCursor (handle: DeviceHandle; column, row: CARDINAL);
  95.  
  96.         (*  Der Textcursor wird in der Spalte 'column' und der Zeile 'row'
  97.          *  positioniert.
  98.          *)
  99.  
  100. PROCEDURE CursorText (handle: DeviceHandle; REF str: ARRAY OF CHAR);
  101.  
  102.         (*  Ab der aktuellen Cursorposition wird der in 'str' ange-
  103.          *  gebene Text ausgegeben.
  104.          *)
  105.  
  106. PROCEDURE ReverseVideoOn (handle: DeviceHandle);
  107.  
  108.         (*  Nach diesem Aufruf werden alle auszugebenden Zeichen invers
  109.          *  dargestellt.
  110.          *)
  111.  
  112. PROCEDURE ReverseVideoOff (handle: DeviceHandle);
  113.  
  114.         (*  Die Zeichen, die nach Aufruf dieser Routine ausgegeben werden,
  115.          *  werden normal dargestellt.
  116.          *)
  117.  
  118. PROCEDURE GetCursorLocation (    handle     : DeviceHandle;
  119.                              VAR column, row: CARDINAL);
  120.  
  121.         (*  Spalte 'column' und Zeile 'row', in der sich der Cursor augen-
  122.          *  blicklich befindet, wird ermittelt.
  123.          *)
  124.  
  125. PROCEDURE TabletStatus (handle: DeviceHandle): BOOLEAN;
  126.  
  127.         (*  Erfragt, ob eine Maus, ein Joystick, ein Grafiktablett oder
  128.          *  ein ähnliches Gerät angeschlossen ist.
  129.          *)
  130.  
  131. PROCEDURE HardCopy (handle: DeviceHandle);
  132.  
  133.         (*  Gibt eine Bildschirmhardcopy auf den Drucker aus.
  134.          *  Entspricht <ALT>+<Help>
  135.          *)
  136.  
  137. PROCEDURE DisplayCursor (handle     : DeviceHandle;
  138.                          row, column: CARDINAL);
  139.  
  140.         (*  Stellt den Grafikcursor auf dem Bildschirm dar. Beim Atari
  141.          *  werden die Parameter 'row' und 'column' ignoriert.
  142.          *  Entspricht 'VDInputs.ShowCursor (TRUE)'
  143.          *)
  144.  
  145. PROCEDURE RemoveCursor (handle: DeviceHandle);
  146.         
  147.         (*  Der Grafikcursor wird wieder vom Bildschirm entfernt.
  148.          *  Entspricht 'VDInputs.HideCursor'
  149.          *)
  150.          
  151.  
  152. (*      Folgende Routinen sind nur bei geladenem GDOS verfügbar.
  153.  *)
  154.  
  155. PROCEDURE FormAdvance (handle: DeviceHandle);
  156.  
  157.         (*  Ist nur wirkungsvoll, falls das angesprochene Gerät ein Drucker
  158.          *  ist. In diesem Fall wird ein Seitenvorschub erzeugt.
  159.          *  Der Datenpuffer wird nicht gelöscht.
  160.          *)
  161.  
  162. PROCEDURE OutputWindow (handle: DeviceHandle; frame: Rectangle);
  163.  
  164.         (*  Die zu diesem Zeitpunkt für 'handle' gepufferten Ausgabebefehle
  165.          *  werden ausgeführt. Dabei ist die Ausgabe auf den Rechteckbereich
  166.          *  'frame' beschränkt.
  167.          *  Auch hier muß 'handle' die Gerätekennung eines Druckers sein.
  168.          *)
  169.          
  170. PROCEDURE ClearDisplayList (handle: DeviceHandle);
  171.  
  172.         (*  Der Druckerpuffer des durch 'handle' beschriebenen Druckers
  173.          *  wird gelöscht.
  174.          *)
  175.          
  176.          
  177. TYPE    AspectRatio     = (noAspect, pixelAspect, sideAspect);
  178.         ScaleMode       = (sameScl, seperateScl);
  179.          
  180. PROCEDURE OutputBitImage (    handle : DeviceHandle;
  181.                           REF fname  : ARRAY OF CHAR;
  182.                               aspect : AspectRatio;
  183.                               scaling: ScaleMode;
  184.                               numPts : CARDINAL;
  185.                               frame  : Rectangle);
  186.  
  187.         (*  Ein File, das ein Bitmuster enthält wird auf den Drucker ausge-
  188.          *  geben.
  189.          *
  190.          *  'handle'    -- Die Gerätekennung
  191.          *  'fname'     -- Name des auszudruckenden Files
  192.          *
  193.          *  'aspect' nimmt folgende Werte an:
  194.          *
  195.          *    'noAspect'    -- kein Aspect Ratio
  196.          *    'pixelAspect' -- es wird darauf geachtet, daß ein Pixel gleiche
  197.          *                     Breite und Höhe hat
  198.          *    'sideRatio'   -- es wird darauf geachtet, daß das Bild die
  199.          *                     Kantenlängen des Ausgabegerätes voll ausnutzt
  200.          *
  201.          *  Für 'scaling' gilt:
  202.          *
  203.          *    'sameScl'     -- Einheitliche Maßstabsänderung
  204.          *    'seperateScl' -- die horizontale Maßstabsveränderung ist nicht
  205.          *                     an die vertikale gebunden und umgekehrt
  206.          *
  207.          *  'numPts' bestimmt wieviele Punkte von 'frame' genutzt werden:
  208.          *
  209.          *    '0' -- 'frame' wird ignoriert und das die Ausmaße des auszu-
  210.          *           gebenden Bereichs bestimmende Rechteck wird aus dem
  211.          *           File ausgelesen
  212.          *    '1' -- Die Position von 'frame' bestimmt die Position der Ausgabe
  213.          *    '2' -- 'frame' bestimmt sowohl die Position, als auch die Höhe
  214.          *           und Breite der Ausgabe
  215.          *
  216.          *  ACHTUNG: In dieser Version nicht implementiert.
  217.          *)
  218.          
  219. PROCEDURE SelectPalette (handle: DeviceHandle; palette: CARDINAL);
  220.  
  221.         (*  Hiermit wird eine Farbpalette gesetzt. 'palette' kann folgende
  222.          *  Werte annehmen:
  223.          *
  224.          *    '0' -- Rot, Grün, Braun
  225.          *    '1' -- Cyan, Magenta, Weiß
  226.          *
  227.          *  Ist nach Aufruf dieser Funktion 'GemError () = TRUE', so konnte
  228.          *  die gewünschte Palette nicht gesetzt werden. Mit 'ErrorNumber'
  229.          *  kann die ersatzweise gesetzte Palette erfragt werden.
  230.          *
  231.          *  Hinweis: Diese Funktion ist normalerweise nur für einen IBM-
  232.          *           Farbmonitor in mittlerer Auflösung bestimmt.
  233.          *
  234.          *  ACHTUNG: In dieser Version nicht implementiert.
  235.          *)
  236.          
  237. PROCEDURE GetFilmTypes (    handle: DeviceHandle;
  238.                         VAR films : ARRAY OF CHAR);
  239.  
  240.         (*  'handle' muß die Kennung eines Polaroid-Bild-Recorders sein.
  241.          *  Die Routine liefert in 'films' die Information zu 5 Filmen
  242.          *  (Film-Typ, Hersteller, ASA-Wert). Dabei sind für jeden Film
  243.          *  25 Zeichen reserviert. Werden diese nicht voll ausgenutzt, so
  244.          *  werden sie mit Leerzeichen aufgefüllt.
  245.          *  Wird ein Array übergeben, das weniger als 5 * 25 = 125 Zeichen
  246.          *  faßt, so wird ein Laufzeitfehler ausgelöst.
  247.          *
  248.          *  ACHTUNG: In dieser Version nicht implementiert.
  249.          *)
  250.          
  251. TYPE    IndexArray      = ARRAY [0..7], [0..1] OF CHAR;
  252.          
  253. PROCEDURE GetDriverState (    handle    : DeviceHandle;
  254.                           VAR port, film: CARDINAL;
  255.                           VAR lightness : INTEGER;
  256.                           VAR interlace : BOOLEAN;
  257.                           VAR planes    : CARDINAL;
  258.                           VAR indexes   : IndexArray);
  259.                           
  260.         (*  Auch diese Routine ist für eine Polaroid-Bild-Recorder gedacht.
  261.          *  Sie erfragt den Gerätestatus. Dabei haben die gelieferten Para-
  262.          *  meter folgende Bedeutung:
  263.          *
  264.          *  'port'      -- Nummer des Übertragungsports (bei 0 beginnend)
  265.          *  'film'      -- Filmnummer (0 bis 4)
  266.          *  'lightness' -- Belichtung (-3 bis 3)
  267.          *  'interlace' -- '= TRUE' ~ interlaced Bild
  268.          *  'planes'    -- Anzahl der Farbebene (1 bis 4)
  269.          *  'indexes'   -- Zwei-Zeichen-Code für den Farbindex
  270.          *
  271.          *  ACHTUNG: In dieser Version nicht implementiert.
  272.          *)
  273.          
  274. PROCEDURE SetDriverState (handle    : DeviceHandle;
  275.                           port, film: CARDINAL;
  276.                           lightness : INTEGER;
  277.                           interlace : BOOLEAN;
  278.                           planes    : CARDINAL;
  279.                           indexes   : IndexArray);
  280.                           
  281.         (*  Setzt die mit 'GetDriverState' erfragten Parameter.
  282.          *
  283.          *  ACHTUNG: In dieser Version nicht implementiert.
  284.          *)
  285.          
  286. PROCEDURE SaveDriverState (handle: DeviceHandle);
  287.  
  288.         (*  Speichert die mit 'SetDriverState' gesetzten Parameter auf
  289.          *  Diskette.
  290.          *
  291.          *  ACHTUNG: In dieser Version nicht implementiert.
  292.          *)
  293.          
  294. PROCEDURE SuppressPaletteMsg (handle: DeviceHandle);
  295.  
  296.         (*  Die Fehlermeldungen eines Polaroid-Bild-Recorder-Gerätetreibers
  297.          *  werden unterdrückt.
  298.          *
  299.          *  ACHTUNG: In dieser Version nicht implementiert.
  300.          *)
  301.          
  302. CONST   noErrorPE      = 0;  (* Kein Fehler *)
  303.         shutterOpenPE  = 1;  (* Verschluß für Belichtung geöffnet *)
  304.         noPortPE       = 2;  (* Es ist kein Port festgelegt *)
  305.         pltNotAvailPE  = 3;  (* Palette am Port nicht verfügbar *)
  306.         interuptPE     = 4;  (* Die Viedeoverbindung ist unterbrochen *)
  307.         noMemPE        = 5;  (* Kein Speicher vom Betriebssystem erhältlich*)
  308.         noBufferMemPE  = 6;  (* Speicher im Puffer reicht nicht aus *)
  309.         memNotFreePE   = 7;  (* Speicher ist nicht frei *)
  310.         noFilePE       = 8;  (* Gerätetreiber-File wirde nicht gefunden *)
  311.         wrongTypePE    = 9;  (* File besitzt den falschen Typ *)
  312.         filmReadyPE    = 10; (* Der Film ist entwicklungsfertig *)
  313.         
  314.          
  315. PROCEDURE PaletteError (handle: DeviceHandle): CARDINAL;
  316.  
  317.         (*  Hiermit kann man den Status bzw. eventuelle Fehler bei den
  318.          *  Operationen mit einem Polaroid-Bild-Recorder erfragen.
  319.          *
  320.          *  ACHTUNG: In dieser Version nicht implementiert.
  321.          *)
  322.  
  323. PROCEDURE MetafileExtents (handle: DeviceHandle; min, max: Point);
  324.  
  325.         (*  Die Größeninformationen im Metafile-Vorspann werden erneuert.
  326.          *  Dabei geben 'min' bzw. 'max' den x/y-Wert des minimalen bzw.
  327.          *  maximalen Rechtecks an.
  328.          *)
  329.  
  330. PROCEDURE WriteToMetafile (    handle  : DeviceHandle;
  331.                                numIntin: CARDINAL;
  332.                            REF intin   : ARRAY OF INTEGER;
  333.                                numPtsin: CARDINAL;
  334.                            REF ptsin   : ARRAY OF INTEGER);
  335.                            
  336.         
  337.         (*  Mit dieser Prozedur kann man benutzerdefinierte Kommandos in
  338.          *  ein Metafile schreiben.
  339.          *
  340.          *  'intin[0]'  -- Hier wird der vom Benutzer definierte Sub-
  341.          *                 Opcode eingetragen, der das Kommando identi-
  342.          *                 fiziert (sollte größer als 100 sein).
  343.          *  'intin[1..]'-- In den übrigen Elementen von 'intin' sollten
  344.          *                 die vom Benutzer für dieses Kommando bestimmten
  345.          *                 Parameter übergeben werden.
  346.          *  'ptsin[0..]'-- Ebenso hier.
  347.          *)
  348.  
  349.  
  350.  
  351. PROCEDURE SetVDIFileName (handle: DeviceHandle; REF fname: ARRAY OF CHAR);
  352.  
  353.         (*  Der Name eines Metafiles wird von dem Standardnamen 'GEMFILE.GEM'
  354.          *  in 'fname' umbenannte. Optional kann auch ein Pfad mit angegeben
  355.          *  werden. Dieser Aufruf muß dem entsprechenden 'OpenDevice'-Aufruf
  356.          *  direkt folgen, sonst wird er ignoriert.
  357.          *)
  358.          
  359.          
  360. (*      Die folgenden beiden Funktionen sind im ROM vorhanden, es ist also
  361.  *      kein GDOS notwendig.
  362.  *
  363.  *      ACHTUNG: Die beiden Routine sind von Atari nicht offiziell doku-
  364.  *               mentiert und sollten daher nur in Ausnahmefällen benutzt
  365.  *               werden.
  366.  *)
  367.  
  368. PROCEDURE SetLineOffset (handle: DeviceHandle; offset: INTEGER);
  369.  
  370.         (*  Bestimmt den Offset zum Anfang des logischen Bildschirms (in
  371.          *  Zeilen). Standardwert ist 0.
  372.          *)
  373.          
  374. PROCEDURE InitSystemFont (handle: DeviceHandle; fontHeader: ADDRESS);
  375.  
  376.         (*  Der Zeichensatz wird als Systemzeichensatz installiert.
  377.          *  Dabei zeigt 'fontHeader' auf den Begin des Font-Headers
  378.          *  (siehe 'LineA').
  379.          *
  380.          *  Hinweis: Die Breite der Zeichenzelle jedes Characters aus dem
  381.          *           Zeichensatz muß 8 Pixel betragen.
  382.          *)
  383.          
  384.          
  385. END VDIEscapes.